﻿/************************************************************************

   Extended Silverlight Toolkit

   Copyright (C) 2010-2012 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://extendedsilverlight.codeplex.com/license

   Please purchase a commercial version of this toolkit if you are using
   it in a commercial product. The commercial versions support the project,
   and also include more features for each control, priority support,
   source code, updates, removed watermark, and a proprietary license.

   Visit http://xceed.com and follow @datagrid on Twitter.

  **********************************************************************/

using System;
using System.Windows;
using System.Windows.Controls;

namespace Xceed.Silverlight.DataGrid
{
  internal class ColumnElementsInnerHost : Panel
  {
    public ColumnElementsInnerHost()
    {
      DataGridBehaviors.SetClipElement( this, true );
    }

    public double CellsIndent 
    { 
      get
      {
        return m_cellsIndent;
      }
      set
      {
        if( m_cellsIndent != value )
        {
          m_cellsIndent = value;
          this.InvalidateMeasure();
        }
      } 
    }


    protected override Size MeasureOverride( Size availableSize )
    {
      double desiredHeight = 0d;
      double desiredWidth = this.CellsIndent;

      foreach( UIElement child in this.Children )
      {
        ColumnElementWrapper colElement = ( ColumnElementWrapper )child;
        if( !colElement.IsRecycled )
        {
          availableSize.Width = colElement.ColumnWidth;
          desiredWidth += colElement.ColumnWidth;
          //Must call measure for all UI elements anyway.
          child.Measure( availableSize );
          desiredHeight = Math.Max( desiredHeight, child.DesiredSize.Height );
        }
      }

      return new Size( desiredWidth, desiredHeight );      
    }



    protected override Size ArrangeOverride( Size finalSize )
    {
      double indent = this.CellsIndent;
      foreach( UIElement element in this.Children )
      {
        ColumnElementWrapper colElement = ( ColumnElementWrapper )element;
        if( !colElement.IsRecycled )
        {
          Rect r = new Rect( colElement.ColumnOffset + indent, 0, colElement.ColumnWidth, finalSize.Height );

          ((ILayoutElement) colElement).Arrange(new ArrangeParameters(r, null));
        }
      }

      return finalSize;
    }

    private double m_cellsIndent;
  }
}
